﻿#ifndef TRACK_DATA_TABLE_MODEL_H
#define TRACK_DATA_TABLE_MODEL_H

/*****************************************************************************************
  @Copyright  2020-2021
  @Date       2021-05-23
  @Author     qiaowei
  @Contact    weiweiqiao@126.com
  @Version    1.0
  @Brief      模型类，显示从文件中读取的航迹数据或条件选择出的航迹数据
  @Other      None
  @History    None
  @Functions  None
******************************************************************************************/

#include <QAbstractTableModel>
#include <QObject>
#include <QThread>

class Track_data;

class Track_data_table_model : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit Track_data_table_model(QObject *parent = nullptr);
    ~Track_data_table_model();

    /***************************************************************************
     @Date     2021-05-25
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    设置表格的行数
     @Param    parent 表格中项的父控件
     @Return   表格的行数
    ***************************************************************************/
    virtual int rowCount(const QModelIndex &parent) const;

    /***************************************************************************
     @Date     2021-05-25
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    设置表格的列数
     @Param    parent 表格中项的父控件
     @Param    表格的列数
    ***************************************************************************/
    virtual int columnCount(const QModelIndex &parent) const;

    /***************************************************************************
     @Date     2021-05-25
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    设置表头
     @Param    section 行/列编号
     @Param    orientation 行列标志位
     @Param    role 数据角色
     @Return   表头角色
    ***************************************************************************/
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;

    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

    /***************************************************************************
     @Date     2021-05-30
     @Author   qiaowei
     @Contact  weiweiqiao@126.com
     @Version  1.0
     @Brief    返回航迹列表，列表中的航迹数据是从文件中读取的，区别在View中显示的航迹列表
     @Return   从文件中读取的航迹列表
    ***************************************************************************/
    QList<Track_data* >* get_track_list();

public slots:
    void sl_add_track_data(Track_data* data);

    void sl_add_filter_data(int row, bool flag);

    void sl_update_model_by_filter();

    void sl_clear_show_list();

private:
    QThread filtered_data_thread_;

    QList<Track_data* >* show_track_list_;
    QList<Track_data* >* list_;
};

#endif // TRACK_DATA_TABLE_MODEL_H
